<?php

namespace app\adminapi\controller;

use think\Controller;
use think\Request;

class Upload extends BaseApi
{
    # 单图片上传
    public function logo(Request $request)
    {
        # 接收参数
        $params = input();
        # 参数检测
        # 处理数据  判断是否有图片上传存放位置的参数
        if (!isset($params["type"]) || empty($params["type"])) {
            $this->fail("参数错误");
        }
        # 判断他是否传指定的文件中存储  
        if (!in_array($params["type"], ["goods", "brand", "category"])) {
            $params["type"] = "live";
        }
        # 获取到上传的图片路径
        $dir = ROOT_PATH . "public" . DS . "upload" . DS . $params["type"];
        # 判断文件是否存在
        if (!is_dir($dir)) {
            # 如果不存在那就创建新文件
            mkdir($dir);
        }
        # 获取上传文件
        $file = request()->file("logo");
        # 判断他是否有上传文件
        if (empty($file)) {
            $this->fail("请上传图片");
        }
        # 上传图片验证
        $info = $file->validate(['size' => 5 * 1024 * 1024, 'ext' => 'jpg,png,gif,jpeg', 'type' => 'image/jpeg,image/png,image/gif'])->move($dir);
        // dump($info);die;
        # 判断是否上传成功 ，如果上传成功或失败都会返回一个bool值
        if (empty($info)) {
            $this->fail($file->getError());
        }
        # 重新获取到文件路径和图片名称
        $logo = DS . "upload" . DS . $params["type"] . DS . $info->getSaveName();
        $this->ok($logo);
    }
    # 多图片上传文件
    public function images(Request $request)
    {
        # 接收参数
        $type = input("type", "goods");
        # 参数检测
        if ($type != "goods") {
            $type = "live";
        }
        # 数据处理
        # 获取到图片的存储路径
        $dir = ROOT_PATH . "public" . DS . "upload" . DS . $type;
        # 判断文件是否存在，如果不存在就执行创建一个文件
        if (!is_dir($dir)) mkdir($dir);
        # 获取到多图片文件
        $files = request()->file("images");
        # 判断他传入进来和是不是一个数组
        if (empty($files) || !is_array($files)) {
            $this->fail("请上传多图片");
        }
        $ret = [
            "success" => [],
            "error" => []
        ];
        # 使用foreach循环里在的图片获取出来
        foreach ($files as $file) {
            # 上传图片的验证
            $info = $file->validate(["size" => 5 * 1024 * 1024, "ext" => "jpg,png,jpeg,gif", "type" => "image/png,image/jpeg,image/gif"])->move($dir);
            # 判断他是否上传成功
            if ($info) {
                # 返回上传成功后的文件名称和路径 
                $ret["success"][] = DS . "upload" . DS . $type . DS . $info->getSaveName();
            } else {
                # 返回失败后有文件名称的错误的信息
                $ret["error"][] = [
                    "name" => $file->getInfo("name"),
                    "msg" => $file->getError()
                ];
            }
        }
        # 返回数据
        $this->ok($ret);
    }
}
